﻿#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdbool.h>
#include<string.h>
#include<stdlib.h>
#include<math.h>

//bool checkAlmostEquivalent(char* word1, char* word2) {
//	int arr1[26] = { 0 };
//	int arr2[26] = { 0 };
//	while (*word1)
//	{
//		arr1[*word1 - 'a']++;
//		arr2[*word2 - 'a']++;
//		word1++;
//		word2++;
//	}
//	int i = 0;
//	for (i = 0; i < 26; i++)
//	{
//		if (abs(arr1[i] - arr2[i]) > 3)
//		{
//			return false;
//		}
//	}
//	return true;
//}

//给你一个下标从 0 开始的数组 nums ，数组大小为 n ，且由 非负 整数组成。
//你需要对数组执行 n - 1 步操作，其中第 i 步操作（从 0 开始计数）要求对 nums 中第 i 个元素执行下述指令：
//如果 nums[i] == nums[i + 1] ，则 nums[i] 的值变成原来的 2 倍，nums[i + 1] 的值变成 0 。否则，跳过这步操作。
//在执行完 全部 操作后，将所有 0 移动 到数组的 末尾 。
//int* applyOperations(int* nums, int numsSize, int* returnSize) {
//	*returnSize = numsSize;
//	int i = 0;
//	for (i = 0; i < numsSize - 1; i++)
//	{
//		if (nums[i] == nums[i + 1])
//		{
//			nums[i] *= 2;
//			nums[i + 1] = 0;
//		}
//	}
//	for (i = 0; i < numsSize; i++)
//	{
//		if (nums[i] == 0)
//		{
//			int j = 0;
//			for (j = i + 1; j < numsSize; j++)
//			{
//				if (nums[j] != 0)
//				{
//					int tmp = nums[i];
//					nums[i] = nums[j];
//					nums[j] = tmp;
//					break;
//				}
//			}
//		}
//	}
//	return nums;
//}
//int main()
//{
//	int arr[] = { 847,847,0,0,0,399,416,416,879,879,206,206,206,272 };
//	int sz = sizeof(arr)/sizeof(arr[0]);
//	int nums = 0;
//	applyOperations(arr, sz, &nums);
//	return 0;
//}

//给定一个排序的整数数组 nums 和一个整数目标值 target ，请在数组中找到 target ，并返回其下标。
// 如果目标值不存在于数组中，返回它将会被按顺序插入的位置。
//
//int searchInsert(int* nums, int numsSize, int target) {
//	int i = 0;
//	if (nums[0] > target)
//	{
//		return 0;
//	}
//	else
//	{
//		for (i = 0; i < numsSize; i++)
//		{
//			if (nums[i] == target)
//				return i;
//			else
//			{
//				if (i == numsSize - 1)
//				{
//					if (nums[i] > target)
//						return i;
//					else
//						return i + 1;
//				}
//				if (nums[i] < target && nums[i + 1]>target)
//				{
//					return i + 1;
//				}
//			}
//		}
//	}
//	return 0;
//}
//int main()
//{
//	int arr[] = { 1,3,5,7 };
//	int sz = sizeof(arr) / sizeof(arr[0]);
//	int ret=searchInsert(arr, sz, 8);
//	printf("%d", ret);
//	return 0;
//}

//给定两个字符串 s 和 t ，编写一个函数来判断它们是不是一组变位词（字母异位词）。
//注意：若 s 和 t 中每个字符出现的次数都相同且字符顺序不完全相同，则称 s 和 t 互为变位词（字母异位词)
//bool isAnagram(char* s, char* t) {
//	int lens = strlen(s);
//	int lent = strlen(t);
//	if (lens != lent)
//		return false;
//	int i = 0;
//	for (i = 0; i < lens; i++)
//	{
//		if (s[i] != t[i])
//			break;
//	}
//	if (i == lens)
//		return false;
//	else
//	{
//		int arrs[26] = { 0 };
//		int arrt[26] = { 0 };
//		while (*s)
//		{
//			arrs[*s - 'a']++;
//			arrt[*t - 'a']++;
//			s++;
//			t++;
//		}
//		for (i = 0; i < 26; i++)
//		{
//			if (arrs[i] != arrt[i])
//				return false;
//		}
//	}
//	return true;
//}

//没写出
//如果数字超出int所能容纳的最大数字则算不了
//void test(char* arr, int sz)
//{
//	int i = 0;
//	for (i = 0; i < sz; i++)
//	{
//		arr[i] = arr[i] - 'a' + '0';
//	}
//}
//
//bool isSumEqual(char* firstWord, char* secondWord, char* targetWord) {
//	int len1 = strlen(firstWord);
//	int len2 = strlen(secondWord);
//	int len3 = strlen(targetWord);
//	test(firstWord, len1);
//	test(secondWord, len2);
//	test(targetWord, len3);
//	int sum1 = atoi(firstWord);
//	int sum2 = atoi(secondWord);
//	int sum3 = atoi(targetWord);
//	if (sum1 + sum2 == sum3)
//		return true;
//	return false;
//}
//int main()
//{
//	char p1[] = "aaa";
//	char p2[] = "a";
//	char p3[] = "aab";
//	isSumEqual(p1, p2, p3);
//	return 0;
//}

//void moveZeroes(int* nums, int numsSize)
//{
//	int i = 0;
//	for (i = 0; i < numsSize; i++)
//	{
//		if (nums[i] == 0)
//		{
//			int j = 0;
//			for (j = i + 1; j < numsSize; j++)
//			{
//				if (nums[j] != 0)
//				{
//					int tmp = nums[j];
//					nums[j] = nums[i];
//					nums[i] = tmp;
//					break;
//				}
//			}
//		}
//	}
//	return nums;
//}

//bool isHappy(int n) {
//	while (n > 9)
//	{
//		int sum = 0;
//		while (n)
//		{
//			sum += pow((n % 10), 2);
//			n /= 10;
//		}
//		n = sum;
//	}
//	if (n == 1 || n == 7)
//		return true;
//	return false;
//}
//int main()
//{
//	int n = 0;
//	scanf("%d", &n);
//	int ret = isHappy(n);
//	printf("%d", ret);
//	return 0;
//}

//int cmpfunc(const void* a, const void* b)
//{
//	return (*(int*)a - *(int*)b);
//}
//
//bool isIsomorphic(char* s, char* t) {
//	int lens = strlen(s);
//	int lent = strlen(t);
//
//	if (lens != lent)
//		return false;
//	else
//	{
//		int flags = 1;
//		int flagt = 1;
//
//		for (int i = 0; i < lens-1; i++)
//		{
//			if ((s[i] == s[i + 1] && t[i] != t[i + 1]) || (s[i] != s[i + 1] && t[i] == t[i + 1]))
//			{
//				return false;
//			}
//			else if (s[i] == s[i + 1]&&t[i]==t[i+1])
//			{
//				flags++;
//				flagt++;
//			}
//			else
//			{
//				flags = 1;
//				flagt = 1;
//			}
//		}
//	}
//	int arrs[128] = { 0 };
//	int arrt[128] = { 0 };
//	while (*s)
//	{
//		arrs[*s]++;
//		arrt[*t]++;
//		s++;
//		t++;
//	}
//
//	qsort(arrs, 128, sizeof(int), cmpfunc);
//	qsort(arrt, 128, sizeof(int), cmpfunc);
//
//	int i = 0;
//	for (i = 0; i < 128; i++)
//	{
//		if (arrt[i] != arrs[i])
//			return false;
//	}
//	return true;
//}
//int main()
//{
//	char p1[] = "abcdefghijklmnopqrstuvwxyzva";
//	char p2[] = "abcdefghijklmnopqrstuvwxyzck";
//	int ret = isIsomorphic(p1, p2);
//	printf("%d", ret);
//	return 0;
//}